package com.xuecheng.media.service;

import com.aliyuncs.exceptions.ClientException;
import com.xuecheng.commons.model.dto.*;
import com.xuecheng.commons.model.vo.*;
import com.xuecheng.media.domain.Media;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xuecheng.web.exceptions.BusinessException;

/**
 * <p>
 * 媒资信息 服务类
 * </p>
 *
 * @author 七安
 * @since 2022-09-22
 */
public interface MediaService extends IService<Media> {

    /**
     * 获取阿里云上传token
     * @return  上传地址，上传凭证
     */
    ResponseResult<VodUploadVo> getUploadToken(VodUploadDto vodUploadDto) throws BusinessException, ClientException;

    /**
     * 刷新上传token
     * @param videoId 视频id
     * @return 上传地址和凭证
     */
    ResponseResult<VodUploadVo> refreshUploadToken(String videoId) throws ClientException;

    /**
     * 保存媒资信息
     * @param mediaDto 要保存的内容
     * @return 结果
     */
    ResponseResult saveMedia(MediaDto mediaDto) throws ClientException, BusinessException;

    /**
     * 分页查询媒资信息
     * @param pageRequest 分页条数...
     * @param mediaQueryDto 媒资查询封装类
     * @return 查到的数据
     */
    PageResponseResult<MediaVo> findMediaList(PageRequest pageRequest, MediaQueryDto mediaQueryDto);

    /**
     * 审核媒资
     * @param mediaAuditDto 审核意见和状态
     * @return 审核结果
     */
    ResponseResult verifyMedia(MediaAuditDto mediaAuditDto) throws BusinessException;

    /**
     * 根据id预览视频
     * @param mediaId 媒资id
     * @return 结果
     */
    ResponseResult<String> getMediaUrl(Long mediaId) throws BusinessException;

    /**
     * 根据id删除媒资
     * @param mediaId 要删除的媒资id
     * @return 结果
     */
    ResponseResult<Boolean> deleteMediaById(Long mediaId) throws Exception;

    /**
     * 根据id获取媒资URL地址
     * @param mediaId id
     * @return 结果
     */
    ResponseResult<ResourceVo> gainMediaUrl(Long mediaId) throws BusinessException, ClientException;

}
